/*
  !promise是一种es6新增的一种异步变成解决方案，主要解决回调函数的回调地狱问题
  !promise有三种状态，pending/fulfilled/rejected,状态是不可逆的
  !promise有三种原型方法then/catch/finally,以及6种静态方法all/race/allSettled/any/resolve/reject
*/

//! 创建promise
// const done = true;
// const p1 = new Promise((resolve, reject) => {
//   setTimeout(() => {
//     if (done) {
//       resolve(1);
//     } else {
//       reject(2);
//     }
//   }, 1000);
// });
// const p2 = new Promise((resolve, reject) => {
//   if (!done) {
//     resolve(3);
//   } else {
//     reject(4);
//   }
// });

//! 消费promise
// p1.then((res) => {
//   console.log(res);
//   return "abc";
// })
//   .then((res) => {
//     console.log(res);
//   })
//   .catch((err) => {
//     console.log(err);
//   })
//   .finally(() => {
//     console.log("finally");
//   });

//! all方法
//! 接收一个由promise对象组成的数组, 返回一个promise对象
//! 每一个promise的状态都是成功的，返回他们成功的结果组成的数组
//! 如果有失败的，返回最先失败的那个结果
// Promise.all([p1, p2])
//   .then((res) => {
//     console.log(res);
//   })
//   .catch((err) => {
//     console.log(err);
//   });

//! race方法
//! 接收一个由promise对象组成的数组, 返回一个promise对象
//! 返回的是最先出结果的那个结果
// Promise.race([p1, p2])
//   .then((res) => {
//     console.log(res);
//   })
//   .catch((err) => {
//     console.log(err);
//   });
